package MusicModel;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;

import javax.sound.midi.*;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Nota  extends Thread implements MetaEventListener, Secuencia {
	
	Sequence sound;
	Sequencer reproductor;
	
	private int bpm, sonido;
	private String nombre;
	private long id;
	
	
	public Nota (String n, int s,int i){
		bpm= 0;
		nombre = n;
		sonido=s;
		id=i;
		
		System.out.println(Thread.currentThread().getName()+": Soy el objeto Instrumento: "+nombre);
	}
	public void crear(){
		//System.out.println("Instrumento Run! con time="+time+" y bpm="+bpm);
		try{
			//Defino la sonido y el reproductor
		 	sound = MidiSystem.getSequence(new File("Notas/"+nombre+".mid"));
		 	reproductor = MidiSystem.getSequencer();
		 	//Seteo el sonido al repropductor
		 	reproductor.setSequence(sound);
		 	//Hago que el reproductor cargue la secuencia
		 	reproductor.open();
		 	//Seteamos repeticion y comienzo
		 	//reproductor.setLoopCount(Sequencer.LOOP_CONTINUOUSLY);  // repeat forever
		 	//reproductor.start();
		}catch(Exception e){
			System.out.println("Error: "+e);
		};
	}

	public void setBpm(int valor){
		bpm = valor;
		reproductor.setTempoInBPM(valor/100.0f);
		System.out.println("Ahora "+nombre+" tiene bpm: "+bpm);
	}
	
	public int getBpm(){
		return bpm;
	}
	
	public void iniciar() {
		reproductor.start();
		System.out.println("Reproduccion Iniciada! Nota: "+this.nombre);
		reproductor.setTickPosition(0);
		/*try {
			Thread.sleep(100);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		reproductor.stop();*/
	}
	
	public void parar(){
		reproductor.stop();
		System.out.println("Reproduccion Detenida! Nota: "+this.nombre);
	}
	
	//---------------------------------metodos MIDI
	
	public void setUpMidi() {
    } 
	
	public void buildTrackAndStart() {
    }
            
    public void makeTracks(int[] list) {        
    }
        
    public  MidiEvent makeEvent(int comd, int chan, int one, int two, int tick) {
        return null;
    }
	public void meta(MetaMessage message) {
	}
	@Override
	public void reiniciar() {
		// TODO Auto-generated method stub
		
	}
	
}